
;***************************************************************
;discription： 数据预处理
;
;author: wangqiang  2023-7-12
;email：  cqwensten@163.com  419436974@qq.com
;***************************************************************
pro pro_datahandle_cal
  ;严格编译规则
  COMPILE_OPT IDL2
  ;二次开发模式初始化，恢复envi的sav文件
  ENVI,/RESTORE_BASE_SAVE_FILES
  ;初始化envi，保存日志文件
  ENVI_BATCH_INIT,log_file='pro_datahandle_cal.log'
  starttime=systime(1)
  PRINT , '-----the datahandle is started，starttime：' ,starttime, '-----'
  PRINT ,'----------'
  ;********************************开始****************************************

  dataCatalog = 0
  fileName = 'Elevation_reclip.tif'
  input_path = 'D:\temp\ctt\VPD\'
  ndvi_file = strjoin([input_path,fileName])
  ;ndvi_file= envi_pickfile(title='选择NDVI文件');这个函数可进行文件选择
  print, ndvi_file

  ;open the image file
  envi_open_file, ndvi_file, r_fid=ndvi_fid ; open the ndvi file
  if (ndvi_fid eq -1) then begin
    envi_batch_exit
    return
  endif

  ;获取行、列号，波段数，数据类型
  envi_file_query, ndvi_fid, ns=ncols, nl=nrows, nb=nbands, Data_Type=data_type, xstart=xstart, ystart=ystart
  print,'the data file info(nppfid,datatype,列数,行数,波段数): ', ndvi_fid, data_type,  ncols,nrows, nbands
  
  ;获取文件投影
  map_info = envi_get_map_info(fid=ndvi_fid)
  help,map_info
  print,map_info
  print,ndvi_file

  ndvi_datas = FltArr(ncols,nrows,nbands)    ;  FLOAT  Floating point
  dims = [-1, 0,ncols - 1 , 0,nrows - 1]
  FOR i=0,nbands-1 DO BEGIN
    ;get the image data in the openning file which band pos=i
    ndvi= envi_get_data(fid=ndvi_fid, dims=dims, pos=i) ;波段数从0开始,提取出训练数据,并且第一层数据为目标数据
    ndvi_datas[*,*,i] = float(ndvi)
  ENDFOR
  
  
  out_datas = make_array(ncols,nrows,type=4,value=0.0)
  ;栅格问题数据过滤
  ;pro_imgscheck_cal,nrows,ncols,nbands,ndvi_datas,out_datas,dataCatalog
  
  ;栅格数据翻转
  pro_imgshift_cal,nrows,ncols,nbands,ndvi_datas,out_datas,dataCatalog


  ;保存模型结果
  output_file = DIALOG_PICKFILE(TITLE = 'save to datahandle result...')
  ;ENVI_WRITE_ENVI_FILE, npp, OUT_NAME = output_file,Map_Info = map_info
  ;二进制方式输出
  IF strlen(strtrim(output_file,2)) GT 0 THEN BEGIN
    OPENW,lun, output_file,/get_lun
    ;写入npp结果数据到文件中
    WRITEU,lun,out_datas
    FREE_LUN,lun
    ;写出头文件信息
    ENVI_SETUP_HEAD,fname=output_file, ns=ncols, nl=nrows, nb=1, interleave=0, data_type=4, offset=0, map_info=map_info, /write, /open
  ENDIF


  ;********************************退出***********************************
  ;print the end time
  endtime=systime(1)
  duration=endtime-starttime
  PRINT ,'----------'
  PRINT ,'-----the datahandle is finished， endtime ：' ,endtime, '-----'
  ;关闭envi二次开发模式
  ENVI_BATCH_EXIT
end